package me.zhengjie.gas.proto.send;

import me.zhengjie.gas.proto.TankerComm;

/**
 * PC机向加油机发送油价修改命令
 */
public class A1Comm extends TankerComm {

    // 新油价版本 0-FA
    private byte version;

    // 加油站ID 1-9999
    private int stationId;

    // 油品代码
    private int oilCode;

    // 生效日期 yymmddhhmm
    private long startDate;

    // 油价1 - 8
    private int[] price = new int[]{0, 0, 0, 0, 0, 0, 0, 0};

    public A1Comm() {
        Cmd = (byte) 0xA1;
    }

    @Override
    public byte[] encode() {
        byte[] data = new byte[35];

        data[0] = Cmd;

        // 新油价版本
        data[1] = version;

        // 加油站ID
        byte a1 = (byte) (stationId / 1000);
        byte a2 = (byte) ((stationId % 1000) / 100);
        byte a3 = (byte) ((stationId % 100) / 10);
        byte a4 = (byte) (stationId % 10);
        data[2] = (byte) ((a1 << 4) | a2);
        data[3] = (byte) ((a3 << 4) | a4);

        // 油品代码
        a1 = (byte) (oilCode / 1000);
        a2 = (byte) ((oilCode % 1000) / 100);
        a3 = (byte) ((oilCode % 100) / 10);
        a4 = (byte) (oilCode % 10);
        data[4] = (byte) ((a1 << 4) | a2);
        data[5] = (byte) ((a3 << 4) | a4);

        // 生效日期 yymmddhhmm
        a1 = (byte) (startDate / 1000000000);
        a2 = (byte) ((startDate % 1000000000) / 100000000);
        a3 = (byte) ((startDate % 100000000) / 10000000);
        a4 = (byte) ((startDate % 10000000) / 1000000);
        byte a5 = (byte) ((startDate % 1000000) / 100000);
        byte a6 = (byte) ((startDate % 100000) / 10000);
        byte a7 = (byte) ((startDate % 10000) / 1000);
        byte a8 = (byte) ((startDate % 1000) / 100);
        byte a9 = (byte) ((startDate % 100) / 10);
        byte aa = (byte) (startDate % 10);
        data[6] = (byte) ((a1 << 4) | a2);
        data[7] = (byte) ((a3 << 4) | a4);
        data[8] = (byte) ((a5 << 4) | a6);
        data[9] = (byte) ((a7 << 4) | a8);
        data[10] = (byte) ((a9 << 4) | aa);

        // 油价 1 - 8
        for (int i=0; i<price.length; i++) {
            a1 = (byte) (price[i] / 100000);
            a2 = (byte) ((price[i] % 100000) / 10000);
            a3 = (byte) ((price[i] % 10000) / 1000);
            a4 = (byte) ((price[i] % 1000) / 100);
            a5 = (byte) ((price[i] % 100) / 10);
            a6 = (byte) (price[i] % 10);

            int pos = 10 + i * 3;
            data[pos + 1] = (byte) ((a1 << 4) | a2);
            data[pos + 2] = (byte) ((a3 << 4) | a4);
            data[pos + 3] = (byte) ((a5 << 4) | a6);
        }

        setDATA(data);
        return super.encode();
    }

    public void setVersion(byte version) {
        this.version = version;
    }

    public int getStationId() {
        return stationId;
    }

    public void setStationId(int stationId) {
        this.stationId = stationId;
    }

    public int getOilCode() {
        return oilCode;
    }

    public void setOilCode(int oilCode) {
        this.oilCode = oilCode;
    }

    public long getStartDate() {
        return startDate;
    }

    public void setStartDate(long startDate) {
        this.startDate = startDate;
    }

    public void setPrice(int pos, int price) {
        this.price[pos] = price;
    }
}
